You are given a string s
that consists of the digits '1'
to '9'
and two integers k
and minLength
.
A partition of s
is called beautiful if:
s
is partitioned intok
non-intersecting substrings.- Each substring has a length of at least
minLength
. - Each substring starts with a prime digit and ends with a non-prime digit. Prime digits are
'2'
,'3'
,'5'
, and'7'
, and the rest of the digits are non-prime.
Return the number of beautiful partitions ofs
. Since the answer may be very large, return it modulo109 + 7
.
A substring is a contiguous sequence of characters within a string.
Input: s = "23542185131", k = 3, minLength = 2 Output: 3 Explanation: There exists three ways to create a beautiful partition: "2354 | 218 | 5131" "2354 | 21851 | 31" "2354218 | 51 | 31"
Input: s = "23542185131", k = 3, minLength = 3 Output: 1 Explanation: There exists one way to create a beautiful partition: "2354 | 218 | 5131".
Input: s = "3312958", k = 3, minLength = 1 Output: 1 Explanation: There exists one way to create a beautiful partition: "331 | 29 | 58".
1 <= k, minLength <= s.length <= 1000
s
consists of the digits'1'
to'9'
.
fromfunctoolsimportcacheclassSolution: defbeautifulPartitions(self, s: str, k: int, minLength: int) ->int: @cachedefsubPartitions(i: int, k: int) ->int: ifk==0: returni==len(s) iflen(s) -i<k*minLengthors[i] notin"2357": return0ret=0forjinrange(i+minLength, len(s) - (k-1) *minLength+1): ifs[j-1] notin"2357": ret= (ret+subPartitions(j, k-1)) %1000000007returnretifs[-1] in"2357": return0returnsubPartitions(0, k)